//package com.ddx.myopengles20;
//
//import android.opengl.GLES20;
//
//import java.nio.ByteBuffer;
//import java.nio.ByteOrder;
//import java.nio.FloatBuffer;
//
///**
// * Created by dingdx on 2018/8/11.
// */
//
//
//
//public class Triangle {
//    private FloatBuffer vertexBuffer;
//    private final int mProgram;
//
//    private int mPositionHandle;
//    private int mColorHandle;
//
//    private final int vertexCount = triangleCoords.length / COORDS_PER_VERTEX;
//    private final int vertexStride = COORDS_PER_VERTEX * 4; // 4 bytes per vertex
//
//    //设置每个顶点的坐标数
//    static final int COORDS_PER_VERTEX = 2;
//    //设置三角形顶点数组
//    static float triangleCoords[] = {   //默认按逆时针方向绘制
//            0.0f,  0.0f, 0.0f, // 顶点
//            0.5f, 1f, 0.0f, // 左下角
//    };
//
//    // 设置三角形颜色和透明度（r,g,b,a）
//    float color[] = {1.0f, 0.0f, 0f, 1.0f};//绿色不透明
//
//    public Triangle() {
//        // 初始化顶点字节缓冲区，用于存放形状的坐标
//        ByteBuffer bb = ByteBuffer.allocateDirect(
//                //(每个浮点数占用4个字节
//                triangleCoords.length * 4);
//        //设置使用设备硬件的原生字节序
//        bb.order(ByteOrder.nativeOrder());
//
//        //从ByteBuffer中创建一个浮点缓冲区
//        vertexBuffer = bb.asFloatBuffer();
//        // 把坐标都添加到FloatBuffer中
//        vertexBuffer.put(triangleCoords);
//        //设置buffer从第一个坐标开始读
//        vertexBuffer.position(0);
//
//
//
//        /*在三角形类中编译shader代码，并将它们添加到一个OpenGL ES program 对象中，然后链接这个program*/
//        // 编译shader代码
//        int vertexShader = MyGLRender.loadShader(GLES20.GL_VERTEX_SHADER,
//                vertexShaderCode);
//        int fragmentShader = MyGLRender.loadShader(GLES20.GL_FRAGMENT_SHADER,
//                fragmentShaderCode);
//
//        // 创建空的OpenGL ES Program
//        mProgram = GLES20.glCreateProgram();
//
//        // 将vertex shader添加到program
//        GLES20.glAttachShader(mProgram, vertexShader);
//
//        // 将fragment shader添加到program
//        GLES20.glAttachShader(mProgram, fragmentShader);
//
//        // 创建可执行的 OpenGL ES program
//        GLES20.glLinkProgram(mProgram);
//    }
//
//
//
///*    使用OpenGL ES 2.0绘制一个定义好的形状需要大量的代码，因为必须提供给图形渲染管道很多细节信息
//
//    VertexShader：用于渲染形状的顶点的OpenGL ES图形代码
//    FragmentShader：用于渲染形状的外观（颜色或纹理）的OpenGL ES代码
//    Program：一个OpenGL ES对象，包含了你想要用来绘制一个或多个形状的shader
//    至少需要一个vertex shader来绘制一个形状和一个fragment shader来为形状着色*/
//    private final String vertexShaderCode =
//        "attribute vec4 vPosition;" +
//                "void main() {" +
//                "  gl_Position = vPosition;" +
//                "}";
//
//    private final String fragmentShaderCode =
//            "precision mediump float;" +
//                    "uniform vec4 vColor;" +
//                    "void main() {" +
//                    "  gl_FragColor = vColor;" +
//                    "}";
//
//    /*创建一个draw()方法负责绘制形状*/
//    float[] lineCoords = new float[6];
//    private int glVMatrix;
//
//    public void draw(float[] lineEnd,float[] mMVPMatrix) {
//        lineCoords[0]=0.0f;
//        lineCoords[1]=0.0f;
//        lineCoords[2]=0.0f;
//        lineCoords[3]=lineEnd[0];
//        lineCoords[4]=lineEnd[1];
//        lineCoords[5]=0.0f;
//
//        //使用着色器程序绘制图形
//        GLES20.glUseProgram(mProgram);
//
//        //颜色变量id
//        mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
//        GLES20.glUniform4fv(mColorHandle, 1, color, 0);
//
//        //将内存中的顶点坐标数组，转换为字节缓冲区，因为opengl只能接受整块的字节缓冲区的数据
//        ByteBuffer bb = ByteBuffer.allocateDirect(lineCoords.length * 4);
//        bb.order(ByteOrder.nativeOrder());
//        FloatBuffer lineBuffer = bb.asFloatBuffer();
//        lineBuffer.put(lineCoords);
//        lineBuffer.position(0);
//
//        //顶点位置变量id
//        mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
//        //启用顶点变量位置id，之后才能传入顶点位置
//        GLES20.glEnableVertexAttribArray(mPositionHandle);
//
//        //准备坐标数据
//        GLES20.glVertexAttribPointer(0, 3, GLES20.GL_FLOAT, false, 0, lineBuffer);
//
//        //绘制直线
//        GLES20.glDrawArrays(GLES20.GL_LINE_STRIP, 0, 2);
//        GLES20.glLineWidth(10);
//
//        //禁用顶点位置变量id，一般绘制结束都需要禁用
//        GLES20.glDisableVertexAttribArray(mPositionHandle);
//    }
//}
